package com.vtech.ont.base;

import org.apache.jena.ontology.Individual;
import org.apache.jena.ontology.OntClass;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;

import java.util.List;

/**
 * 本体模型服务
 *
 * @author houzhiwei
 * @date 2017 /6/29 11:25
 */
public interface OntModelService {

    /**
     * convert model to ontModel.
     *
     * @param model the model
     * @return the ontModel
     */
    OntModel toOntModel(Model model);

    /**
     * 批量建立同一个类的实例
     *
     * @param NS        命名空间
     * @param indiNames 实例名列表
     * @param coCls     类
     * @param base      本体
     * @return the list
     */
    List<Individual> createCoClsIndiBatch(String NS, List<String> indiNames, OntClass coCls, OntModel base);

    /**
     * 为一组实例添加相同的属性，属性值为默认值
     *
     * @param indis      实例组
     * @param prop       属性
     * @param defaultVal 默认值
     * @return list
     */
    List<Individual> addSamePropWithDefaultVal(List<Individual> indis, Property prop, Resource defaultVal);

    /**
     * 创建三元组中的主语资源（主-谓-宾）
     *
     * @param subURI the sub uri
     * @param model  the model
     * @return resource
     */
    Resource createSubjectResource(String subURI, Model model);

    /**
     * 创建谓词
     *
     * @param predURI the pred uri
     * @param model   the model
     * @return property
     */
    Property createPredicate(String predURI, Model model);

    /**
     * 创建三元组中的宾语结点（主-谓-宾）
     *
     * @param objURI the obj uri
     * @param model  the model
     * @return rdf node
     */
    RDFNode createObjectRDFNode(String objURI, Model model);

    /**
     * 从模型中获得资源
     *
     * @param term  the term
     * @param model the model
     * @return resource from model
     */
    List<Resource> getResourceFromModel(String term, OntModel model);

    /**
     * 本体模型中的命名空间列表
     *
     * @param model the model
     * @return ns list
     */
    List<String> getNsList(OntModel model);
}
